import { getAction } from '@/api/manage'


export const OneTableModelMixins = {
  data() {
    return {
      defaultModelForm: {},
      modelForm: {},
      dataId: '',
      serviceParam: {},
      isLoadData: false,
      loadDataUrl: '',
      isEdit: true, // 每个模块必须都要有的属性
      formRule: {}
    }
  },
  props: {
    tableInfoData: {
      type: Object,
      default: function() {
        return {
          dataId: '',
          tableData: {},
          operatorType: '',
          isLoadData: false,
          loadDataUrl: '',
          serviceParam: {}
        }
      }
    }
  },
  created() {
    // 给默认的modelform赋值对的操作
    console.log('onetableMOdelmixins created *****************************************tableInfoData.operatorType'+this.tableInfoData.operatorType)
    // 这里解决在没有直接给model弹框直接传入数据watch不起作用，无法加载页面数据的问题
    if (this.tableInfoData.operatorType && this.tableInfoData.operatorType!=='') {
      this.watchOperatorData(this.tableInfoData.operatorType)
    }
  },
  beforeDestroy() {
    // 将清除验证的操作放置在了destoryed方法中 因为在watchOperatorData中有可能在create方法调用 此时dom还没有加载
    if(this.$refs.modelForm) {
      this.$refs.modelForm.clearValidate();// 每次需要清空验证
    }
    console.log('onetableMOdelmixins beforeDestroy *****************************************tableInfoData.operatorType'+this.tableInfoData.operatorType)
  },
  destroyed() {
    console.log('onetableMOdelmixins destory *****************************************tableInfoData.operatorType'+this.tableInfoData.operatorType)
  },
  watch: {
    'tableInfoData.operatorType': {
      handler: function(val, oldVal) {
        console.log('tableInfoData.operatorType' + '===>val=(' + val + ')*****oldVal=(' + oldVal + ')===this.operatorType===(' + this.tableInfoData.operatorType + ')')
        console.log(this.tableInfoData)
        this.watchOperatorData(val)
      }
    }
  },
  methods: {
    // 初始化表单数据，通过operator判断是新增 编辑 详情各个情况  0 新增  1 详情 2 编辑
    initFormData(operator) {},
    // 将页面的加载的逻辑进行封装 提取到方法里面
    watchOperatorData(operator) {
      if (operator === '0') {
        // 添加
        this.isEdit = true
        // 再添加的时候重新赋值modelform
      }else if (operator === '1') {
        // 详情 
        this.isEdit = false
      }else if (operator === '2') {
        // 编辑
        this.isEdit = true
      }
      // 处理数据中定义的默认值
      this.modelForm = { ...this.modelForm, ...this.defaultModelForm}
      // 添加了在编辑和详情的时候统一加载数据
      this.isLoadData = this.tableInfoData.isLoadData
      this.loadDataUrl = this.tableInfoData.loadDataUrl
      this.dataId = this.tableInfoData.dataId
      this.serviceParam = this.tableInfoData.serviceParam
      // 判断是否传递了根据id进行获取数据
      if (this.isLoadData && this.loadDataUrl) {
        getAction(this.loadDataUrl, {id: this.dataId}).then(res => {
          const tableData = res.data.result
          this.modelForm = { ...this.modelForm, ...tableData}
          this.initFormData(operator)
        })
      }else {
        const tableData = this.tableInfoData.tableData
        this.modelForm = { ...this.modelForm, ...tableData}
        this.initFormData(operator)
      }
    },
    // 弹框关闭的时候的回调
    closeDialogCallback() {},
    // 在保存的时候进行获取modelform的数据主要是由defaultform
    saveBeforeGetModelForm() {
      var modelForm = Object.assign({}, this.defaultModelForm, this.modelForm)
      return modelForm
    }
  }
}